﻿using System;
using Server.Items;
using Server.Network;
using Server.Gumps;
using Server.Mobiles;
using System.Collections;
using System.Collections.Generic;

namespace Server.Mobiles
{
    public class Parametri
    {
        PlayerMobile Player;
        private NomeSesso m_sesso;
        private NomeDio m_dio;
        private NomeRazza m_razza;
        private NomeAllineamento m_allineamento;
        private NomeClasse m_classe;
        private NomeRegno m_regno;
        private BitmaskLavori m_lavori = 0x00000000;
        private int m_numlavori;
        private int contatore = 1;
        public Dictionary<string, int>AllineamentoPossibile;
        public Dictionary<string, int> RegnoPossibile;
        public Dictionary<string, int> DioPossibile;
        public Dictionary<string, int> ClassePossibile;
        public Dictionary<string, int> LavoroPossibile;
        private Point3D themis;
        private Point3D tharsis;
        private Point3D under;

        public Parametri(PlayerMobile player)
        {
            themis = new Point3D(2293, 1193, 0);
            tharsis = new Point3D(2293, 1193, 0);
            under = new Point3D(2293, 1193, 0);
            Player = player;
        }

        #region Setters & Getters
        public int Contatore
        {
            get { return contatore; }
            set { contatore = value; }
        }
        public int NumLavori
        {
            get { return m_numlavori; }
            set 
            { 
                m_numlavori = value;
                ImpostaLavoro();
            }
        }
        public NomeSesso Sesso
        {
            get { return m_sesso; }
            set { m_sesso = value; }
        }
        public NomeDio Dio
        {
            get { return m_dio; }
            set 
            {
                m_dio = value;
                ImpostaClasse();
            }
        }
        public NomeRazza Razza
        {
            get { return m_razza; }
            set 
            { 
                m_razza = value;
                ImpostaAllineamento();
            }
        }
        public NomeAllineamento Allineamento
        {
            get { return m_allineamento; }
            set 
            { 
                m_allineamento = value;
                ImpostaRegno();
                ImpostaDio();
            }
        }
        public NomeClasse Classe
        {
            get { return m_classe; }
            set { m_classe = value; }
        }
        public NomeRegno Regno
        {
            get { return m_regno; }
            set { m_regno = value; }
        }
        public BitmaskLavori Lavori
        {
            get { return m_lavori; }
            set { m_lavori |= value; }
        }
        #endregion

        #region Calcolo Possibilita
        public void ImpostaLavoro()
        {
            LavoroPossibile = new Dictionary<string, int>();
            LavoroPossibile.Add("Sarto", 40);
            LavoroPossibile.Add("Fabbro", 41);
            LavoroPossibile.Add("Stagnino", 42);
            LavoroPossibile.Add("Alchimista", 43);
            LavoroPossibile.Add("Minatore", 44);
            LavoroPossibile.Add("Arcaiolo", 45);
            LavoroPossibile.Add("Falegname", 46);
            LavoroPossibile.Add("Taglialegna", 47);
            LavoroPossibile.Add("Cuoco", 48);
            LavoroPossibile.Add("Pescatore", 49);
            if( m_classe != NomeClasse.Furfante )
                LavoroPossibile.Add("Addestratore", 50);
        }

        public void ImpostaAllineamento()
        {
            AllineamentoPossibile = new Dictionary<string, int>();
            switch(m_razza)
            {
                case NomeRazza.Drow:
                case NomeRazza.Necron:
                case NomeRazza.Mezzorco:
                    AllineamentoPossibile.Add("Malvagio", 14);
                    break;
                case NomeRazza.Sirion:
                case NomeRazza.Elfo:
                case NomeRazza.Nano:
                    AllineamentoPossibile.Add("Buono",15);
                    break;
                default:
                    AllineamentoPossibile.Add("Malvagio", 14);
                    AllineamentoPossibile.Add("Buono", 15);
                    break;
            }

        }

        public void ImpostaRegno()
        {
            RegnoPossibile = new Dictionary<string, int>();
            if ( m_allineamento == NomeAllineamento.Buono )
            {
                RegnoPossibile.Add("Themis", 16);
            }
            else
            {
                if( m_razza == NomeRazza.Drow )
                    RegnoPossibile.Add("Under", 18);
                else
                    RegnoPossibile.Add("Tharsis", 17);
            }
        }

        public void ImpostaDio()
        {
            DioPossibile = new Dictionary<string, int>();
            switch (m_razza)
            {
                case NomeRazza.Elfo:
                    DioPossibile.Add("Corellon",19);
                    DioPossibile.Add("Zenitar", 20);
                    break;
                case NomeRazza.Sirion:
                    DioPossibile.Add("Corellon",19);
                    DioPossibile.Add("Zenitar", 20);
                    DioPossibile.Add("Moradin",21);
                    DioPossibile.Add("Delanna", 22);
                    DioPossibile.Add("Xymor", 23);
                    break;
                case NomeRazza.Nano:
                    DioPossibile.Add("Moradin", 21);
                    break;
                case NomeRazza.Drow:
                    DioPossibile.Add("Lolth", 24);
                    break;
                case NomeRazza.Necron:
                    DioPossibile.Add("Acroa", 25);
                    break;
                case NomeRazza.Mezzorco:
                    DioPossibile.Add("Gruumsh", 26);
                    DioPossibile.Add("Eyranesh", 27);
                    break;
                case NomeRazza.Umano:
                    if (m_allineamento == NomeAllineamento.Buono)
                    {
                        DioPossibile.Add("Delanna", 22);
                        DioPossibile.Add("Xymor", 23);
                        DioPossibile.Add("Zenitar", 20);
                        DioPossibile.Add("Yamenar", 28);
                    }
                    else
                    {
                        DioPossibile.Add("Eyranesh", 27);
                        DioPossibile.Add("Arkay", 29);
                        DioPossibile.Add("Morgia", 30);
                    }
                    break;
                default:
                    break;
            }
        }

        public void ImpostaClasse()
        {
            ClassePossibile = new Dictionary<string, int>();
            switch (m_dio)
            {
                case NomeDio.Corellon:
                case NomeDio.Gruumsh:
                    ClassePossibile.Add("Bardo", 31);
                    ClassePossibile.Add("Mago", 32);
                    ClassePossibile.Add("Chierico", 33);
                    if ((m_razza == NomeRazza.Elfo) || (m_razza == NomeRazza.Mezzorco))
                    {
                        ClassePossibile.Add("Arciere", 34);
                        ClassePossibile.Add("Guerriero", 35);
                    }
                    else
                    {
                        ClassePossibile.Add("Shodan", 36);
                    }
                    break;
                case NomeDio.Zenitar:
                    ClassePossibile.Add("Arciere", 34);
                    ClassePossibile.Add("Druido", 37);
                    break;
                case NomeDio.Acroa:
                case NomeDio.Lolth:
                    ClassePossibile.Add("Arciere", 34);
                    ClassePossibile.Add("Bardo", 31);
                    ClassePossibile.Add("Chierico", 33);
                    ClassePossibile.Add("Guerriero", 35);
                    ClassePossibile.Add("Mago", 32);
                    ClassePossibile.Add("Furfante", 38);
                    if( m_dio == NomeDio.Lolth )
                        ClassePossibile.Add("Shodan", 36);
                    break;
                case NomeDio.Moradin:
                    ClassePossibile.Add("Chierico", 33);
                    ClassePossibile.Add("Bardo", 31);
                    if (m_razza == NomeRazza.Nano)
                    {
                        ClassePossibile.Add("Arciere", 34);
                        ClassePossibile.Add("Guerriero", 35);
                        ClassePossibile.Add("Geniere", 39);
                    }
                    else
                    {
                        ClassePossibile.Add("Mago", 32);
                        ClassePossibile.Add("Shodan", 36);
                    }
                    break;
                case NomeDio.Delanna:
                    ClassePossibile.Add("Bardo", 31);
                    ClassePossibile.Add("Guerriero", 35);
                    ClassePossibile.Add("Mago", 32);
                    ClassePossibile.Add("Shodan", 36);
                    if (m_razza == NomeRazza.Umano)
                    {
                        ClassePossibile.Add("Arciere", 34);
                        ClassePossibile.Add("Chierico", 33);
                    }
                    break;
                case NomeDio.Xymor:
                    ClassePossibile.Add("Chierico", 33);
                    ClassePossibile.Add("Mago", 32);
                    ClassePossibile.Add("Bardo", 31);
                    ClassePossibile.Add("Shodan", 36);
                    if (m_razza == NomeRazza.Umano)
                    {
                        ClassePossibile.Add("Guerriero", 35);
                        ClassePossibile.Add("Furfante", 38);
                        ClassePossibile.Add("Arciere", 34);
                    }
                    break;
                case NomeDio.Eyranesh:
                    ClassePossibile.Add("Druido", 37);
                    if (m_razza == NomeRazza.Umano)
                        ClassePossibile.Add("Arciere", 34);
                    break;
                case NomeDio.Yamenar:
                    ClassePossibile.Add("Bardo", 31);
                    ClassePossibile.Add("Chierico", 33);
                    ClassePossibile.Add("Guerriero", 35);
                    break;
                case NomeDio.Arkay:
                case NomeDio.Morgia:
                    ClassePossibile.Add("Bardo", 31);
                    ClassePossibile.Add("Chierico", 33);
                    ClassePossibile.Add("Guerriero", 35);
                    ClassePossibile.Add("Mago", 32);
                    ClassePossibile.Add("Shodan", 36);
                    if (m_dio == NomeDio.Arkay)
                    {
                        ClassePossibile.Add("Arciere", 34);
                        ClassePossibile.Add("Furfante", 38);
                    }
                    break;
                default:
                    break;
            }
        }
        #endregion

        public void SalvaPlayer()
        {
            Player.Classe = Classe;
            Player.Sesso = Sesso;
            Player.Allineamento = Allineamento;
            Player.Razza = Razza;
            Player.Dio = Dio;
            Player.Regno = Regno;
            Player.Lavoro = Lavori;
            Player.Livello = 1;
            switch (Regno)
            {
                case NomeRegno.Themis:
                    Player.SetLocation(themis,true);
                    break;
                case NomeRegno.Tharsis:
                    Player.SetLocation(tharsis,true);
                    break;
                case NomeRegno.Under:
                    Player.SetLocation(under,true);
                    break;
                default:
                    break;
            }
        }

        public void DebugInfo()
        {
            Player.SendMessage("Classe: "+Classe);
            Player.SendMessage("Sesso: " + Sesso);
            Player.SendMessage("Allineamento: " + Allineamento);
            Player.SendMessage("Razza: " + Razza);
            Player.SendMessage("Dio: " + Dio);
            Player.SendMessage("Regno: " + Regno);
            Player.SendMessage("BitMask LAvori: "+Lavori);
        }
    }
}

namespace Server.Items
{
    public class CreazionePgStone : Item
    {

        public override string DefaultName
        {
            get { return "La Genesi"; }
        }

        [Constructable]
        public CreazionePgStone()
            : base(0xED4)
        {
            Movable = false;
            Hue = 0x20;
        }

        public override void OnDoubleClick(Mobile from)
        {
            if(from.HasGump(typeof(GumpGenesi)))
            {
                from.SendMessage("Hai gia' aperto il gump.");
                return;
            }
            Parametri inizio = new Parametri(from as PlayerMobile);
            from.SendGump(new GumpGenesi(from as PlayerMobile,0,inizio));
        }

        public CreazionePgStone(Serial serial)
            : base(serial)
        {
        }

        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);

            writer.Write((int)0); // version
        }

        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();
        }
    }
}

namespace Server.Gumps
{
    public class GumpGenesi : Gump
    {
        private int x;
        private int y;
        private int cont;
        private int x_label;
        private int y_label;
        private int m_Page;
        PlayerMobile Player;
        Parametri Inizio;

        public GumpGenesi(PlayerMobile player, int page, Parametri inizio)
            : base(500, 200)
        {
            x = 37;
            y = 92;
            x_label = 93;
            y_label = 102;
            cont = 0;
            Inizio = inizio;
            m_Page = page;
            Player = player;

            Closable = true;
            Disposable = true;
            Dragable = true;
            Resizable = false;
            AddPage(0);

            switch (m_Page)
            {
                case 0:
                    AddBackground(0, 0, 451, 348, 5170);
                    AddButton(62, 289, 1809, 1810, (int)Buttons.Maschio, GumpButtonType.Reply, 0);
                    AddButton(295, 289, 1806, 1807, (int)Buttons.Femmina, GumpButtonType.Reply, 0);
                    AddImage(19, 54, 12);
                    AddImage(246, 54, 13);
                    AddHtml(22, 29, 403, 100, @"Benvenuto in D.N.A. ora devi decidere il tuo destino in questo nuovo mondo.
Scegli il sesso del tuo personaggio.", (bool)false, (bool)false);
                    break;
                case 1:
                    AddBackground(0, 0, 451, 348, 5170);
                    this.AddHtml( 28, 33, 398, 45, @"Scegli la Razza del tuo personaggio.", (bool)false, (bool)false);
			        this.AddButton(37, 92, 2642, 2643, (int)Buttons.Umano, GumpButtonType.Reply, 0);
			        this.AddButton(37, 142, 2642, 2643, (int)Buttons.Mezzorco, GumpButtonType.Reply, 0);
			        this.AddButton(37, 192, 2642, 2643, (int)Buttons.Sirion, GumpButtonType.Reply, 0);
			        this.AddButton(37, 242, 2642, 2643, (int)Buttons.Necron, GumpButtonType.Reply, 0);
			        this.AddLabel(93, 102, 0, @"Umano");
			        this.AddLabel(93, 153, 0, @"Mezzorco");
			        this.AddLabel(93, 200, 0, @"Sirion");
			        this.AddLabel(93, 251, 0, @"Necron");
			        this.AddButton(237, 92, 2642, 2643, (int)Buttons.Nano, GumpButtonType.Reply, 0);
			        this.AddButton(237, 142, 2642, 2643, (int)Buttons.Elfo, GumpButtonType.Reply, 0);
			        this.AddButton(237, 192, 2642, 2643, (int)Buttons.Drow, GumpButtonType.Reply, 0);
			        this.AddLabel(293, 102, 0, @"Nano");
			        this.AddLabel(293, 153, 0, @"Elfo");
			        this.AddLabel(293, 200, 0, @"Drow");
                    break;
                case 2:
                    AddBackground(0, 0, 451, 348, 5170);
                    this.AddHtml(28, 33, 398, 45, @"Scegli l'Allineamento del tuo personaggio.", (bool)false, (bool)false);
                    foreach (KeyValuePair<string, int> allin in Inizio.AllineamentoPossibile)
                    {
                        this.AddButton(x, y, 2642, 2643, allin.Value, GumpButtonType.Reply, 0);
                        this.AddLabel(x_label, y_label, 0, @allin.Key);
                        cont++;
                        y += 50;
                        y_label += 50;
                        if (cont > 3)
                        {
                            x += 200;
                            x_label += 200;
                            y = 92;
                            y_label = 102;
                            cont = 0;
                        }

                    }
                    break;
                case 3:
                    AddBackground(0, 0, 451, 348, 5170);
                    this.AddHtml(28, 33, 398, 45, @"Scegli il Dio per il tuo personaggio.", (bool)false, (bool)false);
                    foreach (KeyValuePair<string, int> dio in Inizio.DioPossibile)
                    {
                        this.AddButton(x, y, 2642, 2643, dio.Value, GumpButtonType.Reply, 0);
                        this.AddLabel(x_label, y_label, 0, @dio.Key);
                        cont++;
                        y += 50;
                        y_label += 50;
                        if (cont > 3)
                        {
                            x += 200;
                            x_label += 200;
                            y = 92;
                            y_label = 102;
                            cont = 0;
                        }

                    }
                    break;
                case 4:
                    AddBackground(0, 0, 451, 348, 5170);
                    this.AddHtml(28, 33, 398, 45, @"Scegli la Classe per il tuo personaggio.", (bool)false, (bool)false);
                    foreach (KeyValuePair<string, int> classe in Inizio.ClassePossibile)
                    {
                        this.AddButton(x, y, 2642, 2643, classe.Value, GumpButtonType.Reply, 0);
                        this.AddLabel(x_label, y_label, 0, @classe.Key);
                        cont++;
                        y += 50;
                        y_label += 50;
                        if (cont > 3)
                        {
                            x += 200;
                            x_label += 200;
                            y = 92;
                            y_label = 102;
                            cont = 0;
                        }

                    }
                    break;
                case 5:
                    AddBackground(0, 0, 451, 348, 5170);
                    AddHtml( 28, 33, 398, 45, @"Scegli il percorso del tuo personaggio: potrai essere un avventuriero puro o un plurilavoratore!"
                        , (bool)false, (bool)false);
                    AddButton(37, 92, 2642, 2643, (int)Buttons.UnLavoro, GumpButtonType.Reply, 0);
                    AddButton(37, 142, 2642, 2643, (int)Buttons.DueLavori, GumpButtonType.Reply, 0);
                    AddButton(37, 192, 2642, 2643, (int)Buttons.TreLavori, GumpButtonType.Reply, 0);
                    AddButton(37, 242, 2642, 2643, (int)Buttons.QuattroLavori, GumpButtonType.Reply, 0);
                    AddHtml( 88, 95, 324, 29, @"Avventuriero 1 lavoro, livello massimo 36", (bool)false, (bool)false);
                    AddHtml( 88, 147, 324, 29, @"2 lavori, livello massimo 24", (bool)false, (bool)false);
                    AddHtml( 88, 193, 324, 29, @"3 lavori, livello massimo 16", (bool)false, (bool)false);
                    AddHtml( 88, 245, 324, 29, @"4 lavori, livello massimo 8", (bool)false, (bool)false);
                    break;
                case 6:
                    Inizio.Contatore++;
                    AddBackground(0, 0, 451, 448, 5170);
                    AddHtml(28, 33, 398, 45, @"Scegli il lavoro numero "+(Inizio.Contatore-1)+":"
                        , (bool)false, (bool)false);
                    foreach (KeyValuePair<string, int> lavoro in Inizio.LavoroPossibile)
                    {
                        this.AddButton(x, y, 2642, 2643, lavoro.Value, GumpButtonType.Reply, 0);
                        this.AddLabel(x_label, y_label, 0, @lavoro.Key);
                        cont++;
                        y += 50;
                        y_label += 50;
                        if (cont > 5)
                        {
                            x += 200;
                            x_label += 200;
                            y = 92;
                            y_label = 102;
                            cont = 0;
                        }

                    }
                    break;
                case 7:
                    AddBackground(0, 0, 451, 348, 5170);
                    this.AddHtml(28, 33, 398, 45, @"Scegli il Regno da cui partire.", (bool)false, (bool)false);
                    foreach (KeyValuePair<string, int> regno in Inizio.RegnoPossibile)
                    {
                        this.AddButton(x, y, 2642, 2643, regno.Value, GumpButtonType.Reply, 0);
                        this.AddLabel(x_label, y_label, 0, @regno.Key);
                        cont++;
                        y += 50;
                        y_label += 50;
                        if (cont > 3)
                        {
                            x += 200;
                            x_label += 200;
                            y = 92;
                            y_label = 102;
                            cont = 0;
                        }

                    }
                    break;
                default:
                    break;
            }
        }

        public enum Buttons
        {
            Maschio = 1,
            Femmina = 2,
            UnLavoro = 3,
            DueLavori = 4,
            TreLavori = 5,
            QuattroLavori = 6,
            Umano = 7,
            Mezzorco = 8,
            Sirion = 9,
            Necron = 10,
            Nano = 11,
            Elfo = 12,
            Drow = 13,
            Malvagio = 14,
            Buono = 15,
            Themis = 16,
            Tharsis = 17,
            Under = 18,
            Corellon = 19,
            Zenitar = 20,
            Moradin = 21,
            Delanna = 22,
            Xymor = 23,
            Lolth = 24,
            Acroa = 25,
            Gruumsh = 26,
            Eyranesh = 27,
            Yamenar = 28,
            Arkay = 29,
            Morgia = 30,
            Bardo = 31,
            Mago = 32,
            Chierico = 33,
            Arciere = 34,
            Guerriero = 35,
            Shodan = 36,
            Druido = 37,
            Furfante = 38,
            Geniere = 39,
            Sarto = 40,
            Fabbro = 41,
            Stagnino = 42,
            Alchimista = 43,
            Minatore = 44,
            Arcaiolo = 45,
            Falegname = 46,
            Taglialegna = 47,
            Cuoco = 48,
            Pescatore = 49,
            Addestratore = 50,
        }

        public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
        {
            switch(m_Page)
            {
                case 0:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Maschio:
                            Inizio.Sesso = NomeSesso.Maschio;
                            break;
                        case (int)Buttons.Femmina:
                            Inizio.Sesso = NomeSesso.Femmina;
                            break;
                        default:
                            return;
                    }
                    Player.SendGump(new GumpGenesi(Player, 1, Inizio));
                    break;
                case 1:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Umano:
                            Inizio.Razza = NomeRazza.Umano;
                            break;
                        case (int)Buttons.Mezzorco:
                            Inizio.Razza = NomeRazza.Mezzorco;
                            break;
                        case (int)Buttons.Sirion:
                            Inizio.Razza = NomeRazza.Sirion;
                            break;
                        case (int)Buttons.Necron:
                            Inizio.Razza = NomeRazza.Necron;
                            break;
                        case (int)Buttons.Nano:
                            Inizio.Razza = NomeRazza.Nano;
                            break;
                        case (int)Buttons.Elfo:
                            Inizio.Razza = NomeRazza.Elfo;
                            break;
                        case (int)Buttons.Drow:
                            Inizio.Razza = NomeRazza.Drow;
                            break;
                        default:
                            return;
                    }
                    Player.SendGump(new GumpGenesi(Player, 2, Inizio));
                    break;
                case 2:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Malvagio:
                            Inizio.Allineamento = NomeAllineamento.Malvagio;
                            break;
                        case (int)Buttons.Buono:
                            Inizio.Allineamento = NomeAllineamento.Buono;
                            break;
                        default:
                            return;
                    }
                    Player.SendGump(new GumpGenesi(Player, 3, Inizio));
                    break;
                case 3:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Corellon:
                            Inizio.Dio = NomeDio.Corellon;
                            break;
                        case (int)Buttons.Zenitar:
                            Inizio.Dio = NomeDio.Zenitar;
                            break;
                        case (int)Buttons.Moradin:
                            Inizio.Dio = NomeDio.Moradin;
                            break;
                        case (int)Buttons.Delanna:
                            Inizio.Dio = NomeDio.Delanna;
                            break;
                        case (int)Buttons.Xymor:
                            Inizio.Dio = NomeDio.Xymor;
                            break;
                        case (int)Buttons.Lolth:
                            Inizio.Dio = NomeDio.Lolth;
                            break;
                        case (int)Buttons.Acroa:
                            Inizio.Dio = NomeDio.Acroa;
                            break;
                        case (int)Buttons.Gruumsh:
                            Inizio.Dio = NomeDio.Gruumsh;
                            break;
                        case (int)Buttons.Eyranesh:
                            Inizio.Dio = NomeDio.Eyranesh;
                            break;
                        case (int)Buttons.Yamenar:
                            Inizio.Dio = NomeDio.Yamenar;
                            break;
                        case (int)Buttons.Arkay:
                            Inizio.Dio = NomeDio.Arkay;
                            break;
                        case (int)Buttons.Morgia:
                            Inizio.Dio = NomeDio.Morgia;
                            break;
                        default:
                            return;
                    }
                    Player.SendGump(new GumpGenesi(Player, 4, Inizio));
                    break;
                case 4:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Bardo:
                            Inizio.Classe = NomeClasse.Bardo;
                            break;
                        case (int)Buttons.Mago:
                            Inizio.Classe = NomeClasse.Mago;
                            break;
                        case (int)Buttons.Chierico:
                            Inizio.Classe = NomeClasse.Chierico;
                            break;
                        case (int)Buttons.Arciere:
                            Inizio.Classe = NomeClasse.Arciere;
                            break;
                        case (int)Buttons.Guerriero:
                            Inizio.Classe = NomeClasse.Guerriero;
                            break;
                        case (int)Buttons.Shodan:
                            Inizio.Classe = NomeClasse.Shodan;
                            break;
                        case (int)Buttons.Druido:
                            Inizio.Classe = NomeClasse.Druido;
                            break;
                        case (int)Buttons.Furfante:
                            Inizio.Classe = NomeClasse.Furfante;
                            break;
                        case (int)Buttons.Geniere:
                            Inizio.Classe = NomeClasse.Geniere;
                            break;
                        default:
                            return;
                    }
                    Player.SendGump(new GumpGenesi(Player, 5, Inizio));
                    break;
                case 5:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.UnLavoro:
                            Inizio.NumLavori = 1;
                            break;
                        case (int)Buttons.DueLavori:
                            Inizio.NumLavori = 2;
                            break;
                        case (int)Buttons.TreLavori:
                            Inizio.NumLavori = 3;
                            break;
                        case (int)Buttons.QuattroLavori:
                            Inizio.NumLavori = 4;
                            break;
                        default:
                            return;
                    }
                    Player.SendGump(new GumpGenesi(Player, 6, Inizio));
                    break;
                case 6:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Sarto:
                            if ((Inizio.Lavori & BitmaskLavori.Sarto) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Sarto;
                            break;
                        case (int)Buttons.Stagnino:
                            if ((Inizio.Lavori & BitmaskLavori.Stagnino) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Stagnino;
                            break;
                        case (int)Buttons.Alchimista:
                            if ((Inizio.Lavori & BitmaskLavori.Alchimista) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Alchimista;
                            break;
                        case (int)Buttons.Minatore:
                            if ((Inizio.Lavori & BitmaskLavori.Minatore) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Minatore;
                            break;
                        case (int)Buttons.Arcaiolo:
                            if ((Inizio.Lavori & BitmaskLavori.Arcaiolo) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Arcaiolo;
                            break;
                        case (int)Buttons.Falegname:
                            if ((Inizio.Lavori & BitmaskLavori.Falegname) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Falegname;
                            break;
                        case (int)Buttons.Taglialegna:
                            if ((Inizio.Lavori & BitmaskLavori.Taglialegna) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Taglialegna;
                            break;
                        case (int)Buttons.Cuoco:
                            if ((Inizio.Lavori & BitmaskLavori.Cuoco) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Cuoco;
                            break;
                        case (int)Buttons.Pescatore:
                            if ((Inizio.Lavori & BitmaskLavori.Pescatore) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Pescatore;
                            break;
                        case (int)Buttons.Addestratore:
                            if ((Inizio.Lavori & BitmaskLavori.Addestratore) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Addestratore;
                            break;
                        case (int)Buttons.Fabbro:
                            if ((Inizio.Lavori & BitmaskLavori.Fabbro) > 0)
                            {
                                Inizio.Contatore--;
                                Player.SendMessage("Hai gia scelto questo lavoro!");
                                break;
                            }
                            Inizio.Lavori = BitmaskLavori.Fabbro;
                            break;
                        default:
                            return;
                    }
                    if(Inizio.Contatore > Inizio.NumLavori)
                        Player.SendGump(new GumpGenesi(Player, 7, Inizio));
                    else
                        Player.SendGump(new GumpGenesi(Player, 6, Inizio));
                    break;
                case 7:
                    switch (info.ButtonID)
                    {
                        case (int)Buttons.Themis:
                            Inizio.Regno = NomeRegno.Themis;
                            break;
                        case (int)Buttons.Tharsis:
                            Inizio.Regno = NomeRegno.Tharsis;
                            break;
                        case (int)Buttons.Under:
                            Inizio.Regno = NomeRegno.Under;
                            break;
                        default:
                            return;
                    }
                    Inizio.SalvaPlayer();
                    break;
                default:
                    return;
            }
        }
    }
}